#include "management.h"

int main(int argc, char const *argv[])
{
    //判断执行格式
    if(argc < 3){
        fprintf(stderr,"eg:%s <ip> <port>\n",argv[0]);
        exit(1);
    }
	printf("——————  🌈  欢迎使用独立团员工管理系统  🌈  ——————\n");

	//创建数据库
	if(Sq_create() != 1){
		ERRMSGS("数据创建失败\n");
	}

    //申请变量
    int sockfd,clientfd; 
    struct sockaddr_in serveraddr, clientaddr;
    socklen_t addrlen = sizeof(struct sockaddr);
	pthread_t Thread_one;  //线程号
	THREADMSG thmsg;  //线程传输体

    //创建套接字
    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
        ERRMSGS("创建套接字失败\n");
    }

    //填充服务结构体
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_addr.s_addr = inet_addr(argv[1]);
	serveraddr.sin_port = htons(atoi(argv[2]));

	//绑定网络信息结构体
	if(bind(sockfd,(struct sockaddr*)&serveraddr,addrlen) < 0){
		ERRMSGS("绑定网络信息结构体失败\n");
	}

	//设置为被动监听模式
	if(listen(sockfd,10) < 0){
		ERRMSGS("设置监听模式失败\n");
	}

	//执行客户端连接创建线程操作内容
	while(1){
		//等待客户端的连接
		if((clientfd = accept(sockfd,(struct sockaddr*)&clientaddr,&addrlen)) <0){
			ERRMSGS("客户端连接失败\n");
		}
		printf("———— ✤ 客户端连接成功 ✤ ————\n");

		//填充线程传输信息体
		thmsg.clientfd = clientfd;
		thmsg.clientaddr = clientaddr;

		//创建新线程
		if(pthread_create(&Thread_one,NULL,Thread_oneFun,&thmsg) != 0){
			ERRMSGS("创建线程失败\n");
		}
		pthread_detach(Thread_one);   //设置分离态
	}

    return 0;
}

//客户端线程运行操作内容
void *Thread_oneFun(void *arg){
	//printf("创建线程thread_one测试成功\n");
	ssize_t bytes;         	  //保存接受信息字节数
	THREADMSG thmsg = *(THREADMSG *)arg;  //线程传输信息体
	MEMSG memsg;	//员工信息结构体
	CLMSG clmsg;	//客户端信息结构体
	SEMSG semsg;	//服务器信息结构体

	while(1){
		//接收客户端登录界面信息
		if(recv(thmsg.clientfd,&clmsg,sizeof(clmsg),0) < 0){
			ERRMSGS("接受客户端信息失败\n");
		}
		printf("客户端操作码->%d\n",clmsg.code);

		//接收到客户端的操作码进行对应操作
		switch(clmsg.code){
			case 0:
				printf("———— ⛔ 人员：退出系统  ⛔ ————\n");
				pthread_exit(NULL);
				break;
			case 1:
				printf("———— ⚜️  注册管理员账号 ⚜️  ———— \n");
				server_add(thmsg.clientfd,&semsg,clmsg);
				break;
			case 2:
				printf("———— ⚜️  注册员工账号 ⚜️  ———— \n");
				
				break;
			case 3:
				printf("———— 🎉 欢迎管理员登录 🎉 ———— \n");
				server_check(thmsg.clientfd,&semsg,clmsg);
				break;
			case 4:
				printf("———— 🎉 欢迎员工登录 🎉 ———— \n");
				
				break;
			case 5:
				printf("———— 📛 查询员工信息 📛 ———— \n");
				server_show(thmsg.clientfd,&semsg);
				break;
			case 6:
				printf("———— 🔰 修改员工信息 🔰 ———— \n");
				server_change(thmsg.clientfd,&semsg,clmsg);
				break;
			case 7:
				printf("———— ➕ 添加员工信息 ➕ ———— \n");
				server_install(thmsg.clientfd,&semsg,clmsg);
				break;
			case 8:
				printf("———— ➖ 删除员工信息 ➖ ———— \n");
				server_del(thmsg.clientfd,&semsg,clmsg);
				break;
			default:
				printf("———— ❗ 用户输入错误，已提示 ❗ ————\n");
				break;
		}			
	}
		// else if(bytes == 0){   //用户退出结束线程	
		// 	static char exitmsg[] = "员工退出系统";
		// 	pthread_exit(exitmsg);
		// }
		// printf("客服端发来信息：%s\n",semsg.msg);

		// if(strcmp(semsg.msg,"quit") == 0){
		// 	static char exitmsg[] = "员工退出系统";
		// 	pthread_exit(exitmsg);
		// }
		
		//发送结果
		// strcat(buf,"服务器发送数据测试001\n");
		// if(send(acceptfd,buf,N,0) < 0){
		// 	ERRMSGS("服务发送信息失败\n");
		// } 
	
}

